iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0

今天要來看 方法(Methods) 。

方法(Methods)

Class、Struct和 Enum 都可以定義實力方法,他們裡面可以有特定類型的實例跟功能。

實例方法 (Instance Methods)

實例方法要寫在所屬類型的 {} 裡面。
看下面官方的例子

class Counter {
    var count = 0
    func increment() {
        count += 1
    }
    func increment(by amount: Int) {
        count += amount
    }
    func reset() {
        count = 0
    }
}

而這個 Counter 裡面有三個方法

  • increment 讓計數器增加
  • increment(by: Int) 讓計數器依照一個指定的數值增加
  • reset 歸0
let counter = Counter()
// 一開始為0
counter.increment()
// 現在是1
counter.increment(by: 5)
// 現在是6
counter.reset()
// 現在是0

self屬性

每個實例其實都有一個屬性叫做 self 就是自己本身。
根據上面的例子, increment 的方法也可以這樣寫

func increment() {
    self.count += 1
}

在實例方法中修改值類型

Struct 跟 enum 在預設的情況下是不能再實例方法中被修改。

如果你的 Struct 跟 enum 有需要修改,那可以在你要修改的方法前面加上 mutating 這個屬性。這樣就可以改變方法裡面的屬性。

struct Point {
    var x = 0.0, y = 0.0
    mutating func moveBy(x deltaX: Double, y deltaY: Double) {
        x += deltaX
        y += deltaY
    }
}
var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveBy(x: 2.0, y: 3.0)
print("The point is now at (\(somePoint.x), \(somePoint.y))")
// 印出“The point is now at (3.0, 4.0)”

在可變方法中給 self 值

enum 的可變方法可以把 self 設置為同一個 enum 得不同成員
我們看一下官方的例子

enum TriStateSwitch {
    case off, low, high
    mutating func next() {
        switch self {
        case .off:
            self = .low
        case .low:
            self = .high
        case .high:
            self = .off
        }
    }
}
var ovenLight = TriStateSwitch.low
ovenLight.next()
// ovenLight = .high
ovenLight.next()
// ovenLight = .off

上面的例子中每次調用就會改變 self 本身的狀態。

類型方法

實例方法是被某個類型的實例調用方法,你也可以定義在類型本身上調用方法。這種方法我們叫 類型方法 。 會在 func 前面加上 static 這個關鍵字。如鬼事 Class 可以用 class 來指定,從而做到修改。

我們可以新增一個加法

class Math {
    func add(_ a:Int , _ b:Int) -> Int {
        return a + b
    }
}
let finalResult = Math()
print(finalResult.add(5, 10))
//print 15

那如果使用類型方法就會長下面這樣

class Math{
    class func add(_ a: Int, _ b: Int) -> Int {
    return a + b
    }
}
let finalResult = Math.add(10, 5)
//finalResult = 15

OK,今天就到這裡。


上一篇
30天的 iOS 修仙道路 (21)
下一篇
30天的 iOS 修仙道路 (23)
系列文
30天的 iOS 修仙道路 站穩腳步基礎篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言